{
  lib,
}:

src:
let
  inherit (lib)
    flatten
    groupBy
    mapAttrs
    mapAttrsToList
    ;

  # A specialized form of lib.listFilesRecursive except it will only look
  # for Cargo.toml and config.toml files to keep the intermediate results lean
  listFilesRecursive =
    parentIsDotCargo: dir:
    flatten (
      mapAttrsToList (
        name: type:
        let
          cur = dir + "/${name}";
          isConfig = parentIsDotCargo && (name == "config.toml" || name == "config");
          isCargoToml = name == "Cargo.toml";
        in
        if type == "directory" then
          listFilesRecursive (name == ".cargo") cur
        else if isCargoToml then
          [
            {
              path = cur;
              type = "cargoTomls";
            }
          ]
        else if isConfig then
          [
            {
              path = cur;
              type = "cargoConfigs";
            }
          ]
        else
          [ ]
      ) (builtins.readDir dir)
    );

  foundFiles = listFilesRecursive false src;
  grouped = groupBy (x: x.type) foundFiles;
  cleaned = mapAttrs (_: map (y: y.path)) grouped;

  # Ensure we have a well typed result
  default = {
    cargoTomls = [ ];
    cargoConfigs = [ ];
  };
in
default // cleaned
